// flags/flags_db.go
// =============================================================================
// | 包: flags                                                                |
// | 功能: 提供数据库迁移相关的命令行功能                                       |
// =============================================================================
package flags

import (
	"blog_server/global" // 全局变量包 - 提供全局配置和数据库连接
	"blog_server/models"  // 数据模型包 - 定义系统中使用的所有数据模型

	"github.com/sirupsen/logrus" // 日志库 - 提供结构化日志记录功能
)

// =============================================================================
// | 函数: FlagDB                                                             |
// | 参数: 无                                                                  |
// | 返回: 无                                                                  |
// | 功能: 执行数据库迁移操作                                                  |
// | 说明: 根据所有数据模型自动创建或更新数据库表结构                          |
// |----------------------------------------------------------------------------|
// | 流程:                                                                     |
// | 1. 调用GORM的AutoMigrate方法对所有数据模型执行迁移                        |
// | 2. 处理迁移过程中可能出现的错误，记录错误日志                              |
// | 3. 迁移成功后记录成功日志                                                 |
// =============================================================================
func FlagDB() {
	// 调用GORM的AutoMigrate方法，自动为所有传入的数据模型创建或更新数据库表
	err := global.DB.AutoMigrate(
		&models.UserModel{},          // 用户模型 - 对应users表
		&models.UserConfModel{},      // 用户配置模型 - 对应user_confs表
		&models.ArticleModel{},       // 文章模型 - 对应articles表
		&models.CategoryModel{},      // 分类模型 - 对应categories表
		&models.ArticleDiggModel{},   // 文章点赞模型 - 对应article_diggs表
		&models.CollectModel{},       // 收藏模型 - 对应collects表
		&models.UserArticleCollectModel{}, // 用户文章收藏模型 - 对应user_article_collects表
		&models.UserTopArticleModel{},    // 用户置顶文章模型 - 对应user_top_articles表
		&models.ImageModel{},         // 图片模型 - 对应images表
		&models.UserArticleLookHistoryModel{}, // 用户文章浏览历史模型 - 对应user_article_look_histories表
		&models.CommentModel{},       // 评论模型 - 对应comments表
		&models.BannerModel{},        // 横幅模型 - 对应banners表
		&models.LogModel{},           // 日志模型 - 对应logs表
		&models.GlobalNotificationModel{}, // 全局通知模型 - 对应global_notifications表
	) // 自动迁移所有数据模型到数据库
	if err != nil {
		logrus.Errorf("数据迁移失败 %s", err) // 记录迁移失败的错误日志
		return // 迁移失败时返回
	}
	logrus.Infof("数据库迁移成功!") // 记录迁移成功的信息日志
}
